<!DOCTYPE html>
<html>

<head>
	<meta charset="UTF-8" />
	<title>数据绑定</title>
	<!-- 引入Vue -->
	<script type="text/javascript" src="../js/vue.js"></script>
</head>

<body>
	<!-- 
			Vue中有2种数据绑定的方式：
					1.单向绑定(v-bind)：数据只能从data流向页面。
					2.双向绑定(v-model)：数据不仅能从data流向页面，还可以从页面流向data。
						备注：
								1.双向绑定一般都应用在表单类元素上（如：input、select等）
								2.v-model:value 可以简写为 v-model，因为v-model默认收集的就是value值。
		 -->
	<!-- 准备好一个容器-->
	<div id="root">
		<!-- 普通写法 -->
		<!-- 单向数据绑定：<input type="text" v-bind:value="name"><br/>
			双向数据绑定：<input type="text" v-model:value="name"><br/> -->

		<!-- 简写 -->
		单向数据绑定：<input type="text" :value="name"><br />
		双向数据绑定：<input type="text" v-model="name"><br />
		顺便测试computed属性，生成定义一个计算结果属性nameresult：<span>{{nameresult}}</span> <br/><br/>
		<!-- 如下代码是错误的，因为v-model只能应用在表单类元素（输入类元素）上 -->
		<!-- <h2 v-model:x="name">你好啊</h2> -->
	</div>
</body>

<script type="text/javascript">
	Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

	new Vue({
		el: '#root',
		data: {
			name: '测试数据绑定、computed、watch'
		},
		//下面的compute并不会执行， 因为这个name21被定义了但是并没有与之绑定
		computed: {
			nameresult: {  //注意这里并不能定义name了，因为name已经被定义了，所以只能在定义一个计算结果的属性,这里的定义与方法里面用到的属性并无太大关系也不冲突
				get(){
						console.log('get被调用了')
						// console.log(this) //name
						return this.name;
					},
					//set什么时候调用? 当fullName被修改时。
					set(value){
						console.log('set',value)
						const arr = value.split('-')
						this.name = arr[0]
						this.name = arr[1]
					}
			},
		},
		//记得点击vue实例根节点没反应的时候先点一下timeline
		watch: {
			name(newValue, oldValue) { //这里的name就对应着data中已存在的属性name
				console.log('Name changed:', oldValue, '->', newValue);
			},
		}
	})
</script>

</html>